function submitForm(form,function_callback){
    function_callback = function_callback | null;
    form.getForm().submit({
        clientValidation: true,
        success: function(form,action){
            alert(inspeccionar(form));
            Ext.Msg.alert(
                'Operación Exitosa',
                action.result.msg,
                function_callback
            );
        },
        failure: function(form,action){
            switch (action.failureType) {
              case Ext.form.Action.CLIENT_INVALID:
                 Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
                 break;
              case Ext.form.Action.CONNECT_FAILURE:
                 Ext.Msg.alert('Failure', 'Ajax communication failed');
                 break;
              case Ext.form.Action.SERVER_INVALID:
                Ext.Msg.alert('Failure', action.result.msg);
                break;
              default:
                Ext.Msg.alert('Failure',action.result.msg);
            }
        }
    });
}
/**
 * Crea los toolbar de los panles centrales
 **/
function createToolBar(configs){
    var tb = Ext.create('Ext.toolbar.Toolbar');
    max = configs.length;
    for (i = 0; i < max; i++) {
        if( typeof(configs[i]) == 'string' ){
            tb.add(configs[i]);
        }else{
            tb.add(createButton(configs[i]));
        }
    }
    return tb;
}
/**
 * Crea los botones de menu de navegación
 * @config configuraciones de los botones
 * return un objerto de tipo boton
 **/
function createMenuButton(texto){
    config = {};
    config.text = Ext.String.capitalize(texto);
    config.href = BASE_URL + texto.toLowerCase();
    //config.iconCls = 'navigator_proveedores';
    config.scale = 'medium';
    config.width = 174;
    config.preventDefault = true;
    config.handler = function(btn){
        Ext.Ajax.request({
            url: btn.href,
            params: {id:btn.id},
            method:'POST',
            success: function(response,options){
                var tab = Ext.getCmp(prefijoTabPanel + btn.id);
                if(tab){
                    panelCentral.remove(tab);
                }
                tab = scriptEvaluator(response.responseText);
                addTabPanel(panelCentral,tab);
            },
            failure: function(response,options){
                alert('Ha ocurrido un problema de conexión. Por Favor intente de nuevo.');
            },
            scope:this
        });
    }
    return createButton(config);
}
/**
 * Crea botones
 * @config del boton en formato json
 * return un objeto tipo boton
 **/
function createButton(config){
    return Ext.create('Ext.Button', config);
}
/**
 * Agrega un tabpanel dentro de un panel
 * @contenedor panel donde sera agregado el tabpanel
 * @tab tabpanel a ser agradado
 **/
function addTabPanel(contenedor,tab){
    contenedor.add(tab);
    contenedor.doLayout();
    contenedor.setActiveTab(tab);
}
/**
 * Busca un Elemento segun un id dado
 * @id del elemento a buscar
 * return Element
 **/
function findElementById(id){
    return Ext.ComponentQuery.query(id);
}
/**
 * Evalua si es un objeto valido, si es un script lo convierte a objeto js, funciona como una grapper de la función eval()
 * @script script a ser evaluado
 **/
function scriptEvaluator(script){
    return eval(script);
}
/**
 * Solicita la carga de una vista via Ajax
 * @params url que contiene la vista a cargar
 * @params params parametros a ser enviados al servidor
 * @return referencia al objeto de la vista creada
 **/
function requestView(url,params){
    var view;
    Ext.Ajax.request({
        url: url,
        params: params,
        method:'POST',
        success: function(response,options){
            view = scriptEvaluator(response.responseText);
        },
        failure: function(response,options){
            alert('Ha ocurrido un problema de conexión. Por Favor intente de nuevo.');
        },
        scope:this
    });
    return view;
}
/**
* Crea un tag HTML Img, que funciona como link, empleando un onclick q hace llamado a la funcion requestView().
* @param src url de la imagen a ser visualizada.
* @param title titulo de la iamgen.
* @param urlAction url a ser llamada por requestView.
* @param params parametros a ser enviados a la vista solicitada.
* @return String
**/
function htmlImage(src, title, urlAction, params){
    return '<img src="'+ src +'" onclick="requestView(\'' + urlAction + '\',\'' + params + '\');" title="' + title + '" style="cursor:pointer"/>';
}

function inspeccionar(obj)
{
  var msg = '';

  for (var property in obj)
  {
    if (typeof obj[property] == 'function')
    {
      var inicio = obj[property].toString().indexOf('function');
      var fin = obj[property].toString().indexOf(')')+1;
      var propertyValue=obj[property].toString().substring(inicio,fin);
      msg +=(typeof obj[property])+' '+property+' : '+propertyValue+' ;\n';
    }
    else if (typeof obj[property] == 'unknown')
    {
      msg += 'unknown '+property+' : unknown ;\n';
    }
    else
    {
      msg +=(typeof obj[property])+' '+property+' : '+obj[property]+' ;\n';
    }
  }
  return msg;
}
